/*----------------------------------------------------------------------------*\
|
|						Public Interface to Muse Technology
|
|							     www.Muse.com
| Author : SunJun 
| Email : sundoom@msn.com
\*----------------------------------------------------------------------------*/

//////////////////////////////////////////////////////////////////////////
// $Id: MFile.h,v 1.1 2009/04/03 12:46:09 sunjun Exp $
//////////////////////////////////////////////////////////////////////////

#ifndef __MFile__
#define __MFile__

//////////////////////////////////////////////////////////////////////////

#if defined __cplusplus

//////////////////////////////////////////////////////////////////////////

#include <MObject.h>

//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN

//////////////////////////////////////////////////////////////////////////

	typedef MPtr<class MFile>MFilePtr;

	//////////////////////////////////////////////////////////////////////////

	// this class provides an object-oriented config interface.
	class API MFile : public MObject
	{
	public:
		// constructor
		MFile();

		// destructor
		virtual ~MFile();

		// open a file
		INLINE BOOL	open( const CHAR *name, U32 option = 0 );

		// read the data from the file
		INLINE U32 read( MData* data );

		// write the data to the file
		INLINE U32 write( const MData* data );

		// seek the offset in the file
		INLINE BOOL	seek( I32 offset, U32 origin = 0 );

		// tell the file position
		INLINE U32 tell();

		// close the file
		INLINE VOID	close();

		// declare the dynamic creator
		MDECLARE_DYNCREATOR();

		// declare the dispatch map
		MDECLARE_DISPATCH_MAP()

	private:
		HANDLE mFile;
		U32	mOption;
		BOOL mCompress;
		U32	mPos;
		std::vector<U8>mBuffer;
	};

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////

#endif // __cplusplus

//////////////////////////////////////////////////////////////////////////

#endif // __GFile__

//////////////////////////////////////////////////////////////////////////